﻿goog.provide('imc.ui.CatProveedorCuenta');

imc.ui.CatProveedorCuenta = function (opt) { //Constructor
    //attributes privados
    var dataGrid;

    /*\\Behavior : --------------------------------- */
    //Todos los ids van con #
    this.opt = {
        idDivContent: "#der"
        , idDivNav: "#izq"
        , idTableDataTable: "#tblCat"
    };

    $().extend(this.opt, opt);
    //alert(this.opt.test);
    this.draw();
    /*//Behavior : --------------------------------- */
} //Fin constructor

//Atributos Público************************************************
imc.ui.CatProveedorCuenta.prototype.oTable = null;
imc.ui.CatProveedorCuenta.prototype.opt = null;
imc.ui.CatProveedorCuenta.prototype.ID_PROVEEDOR = null;
imc.ui.CatProveedorCuenta.prototype.ID_BANCO = null;

//Metodos Públicos*************************************************
imc.ui.CatProveedorCuenta.prototype.draw = function () {
    $(this.opt.idDivNav).load('catalogos.html #navigationPanelCat', function () { });
    this.loadContent();
};

imc.ui.CatProveedorCuenta.prototype.loadContent = function () {
    var that = this;
    $(this.opt.idDivContent).load('catalogos.html #catContent', function () {
        that.catProveedorCuentaDataTable();
    });
};

imc.ui.CatProveedorCuenta.prototype.catProveedorCuentaDataTable = function () {
    var that = this;
    $.ajax({
        url: "Services/CAT.svc/GetDataProveedorCuenta"
        ,type: "POST"
        ,dataType: "json"
        ,data: '{}'
        ,contentType: "application/json; charset=utf-8"
        ,success: function (data) {
            oTable = $('#tblCat').dataTable({
                'bInfo': false
                ,'bPaginate': false
                ,'bLengthChange': false
                ,'bRetrieve': true
                ,'sDom': ''
                ,'sInfoEmpty': ''
                ,'bAutoWidth': false
                ,aaData: data.GetDataProveedorCuentaResult
                ,aoColumns: [
                    {
                        "aTargets": [0]
                        ,"fnRender": function (oObj) {
                            return '<input type="checkbox" id="readonly" imc-data="' + oObj.aData["ID_PROVEEDOR_CUENTA"] + '" value="' + oObj.aData[0] + '" name="check" />';
                        }
                        ,"sClass": "checkboxId"
                        ,"bSearchable": false
                        ,"bSortable": false
                        ,"mDataProp": "check"
                        ,"sWidth": "4%"
                    }
                    ,{ "sTitle": "Proveedor", "mDataProp": "PROVEEDOR", "sClass": "editarCat" }
                    ,{ "sTitle": "Banco", "mDataProp": "BANCO", "sClass": "editarCat" }
                    ,{ "sTitle": "Número de Cuenta", "mDataProp": "NUMERO_CUENTA", "sClass": "editarCat" }
                    ,{ "sTitle": "Clabe", "mDataProp": "CLABE", "sClass": "editarCat" }
                    ,{ "sTitle": "Beneficiario ", "mDataProp": "BENEFICIARIO", "sClass": "editarCat" }
                ]
            });
            $('#tblCat tbody .editarCat').die('click');
            $('#tblCat tbody .editarCat').live('click', function () {
                var oTable = $('#tblCat').dataTable();
                var sDataCat = oTable.fnGetData($(this).parent().get(0));
                console.log(sDataCat);
                for (var i in sDataCat) {
                    if (i = 'ID_PROVEEDOR_CUENTA') {
                        idCat = sDataCat[i];
                    }
                }
                var dlg = that.dlgUpdateProveedorCuenta(idCat);
                dlg.setVisible(true);
                //Recuperar campos para modificar
                console.log('idCatálogo: '+idCat);
                /*\\Combo Proveedor : --------------------------------- */
                var prov = new goog.ui.Select(null, null, goog.ui.FlatMenuButtonRenderer.getInstance());
                $.ajax({
                    url: "Services/CAT.svc/GetDataProveedor",
                    type: "POST",
                    dataType: "json",
                    data: '{}',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.GetDataProveedorResult != null) {
                            var test;
                            for (var i = 0; i < data.GetDataProveedorResult.length; i++) {
                                test = new goog.ui.MenuItem(data.GetDataProveedorResult[i].PROVEEDOR);
                                test.setValue(data.GetDataProveedorResult[i].ID_PROVEEDOR);
                                prov.addItem(test);
                                goog.events.listen(test, goog.ui.Component.EventType.ACTION, function (e) {
                                    that.ID_PROVEEDOR = e.target.getValue();
                                    console.log(e.target.getCaption()+" : "+that.ID_PROVEEDOR);
                                });
                            }
                        }
                        else {
                            alert('No hay datos de Proveedor cargados en la base');
                        }
                    },
                    error: function () {
                        alert('Error al cargar datos Proveedor');
                    }
                });
                /*//Combo Proveedor : --------------------------------- */
                /*\\Combo Banco : --------------------------------- */
                var ban = new goog.ui.Select(null, null, goog.ui.FlatMenuButtonRenderer.getInstance());
                $.ajax({
                    url: "Services/CAT.svc/GetDataBanco",
                    type: "POST",
                    dataType: "json",
                    data: '{}',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        if (data.GetDataBancoResult != null) {
                            var test;
                            for (var i = 0; i < data.GetDataBancoResult.length; i++) {
                                test = new goog.ui.MenuItem(data.GetDataBancoResult[i].BANCO);
                                test.setValue(data.GetDataBancoResult[i].ID_BANCO);
                                ban.addItem(test);
                                goog.events.listen(test, goog.ui.Component.EventType.ACTION, function (e) {
                                    that.ID_BANCO = e.target.getValue();
                                    console.log(e.target.getCaption()+" : "+that.ID_BANCO);
                                });
                            }
                        }
                        else {
                            alert('No hay datos de Banco cargados en la base');
                        }
                    },
                    error: function () {
                        alert('Error al cargar datos Proveedor');
                    }
                });
                /*//Combo Banco : --------------------------------- */
                $.ajax({
                    type: "POST"
                    ,url: "Services/Cat.svc/GetOneProveedorCuenta"
                    ,data: '{"ID_PROVEEDOR_CUENTA":' + idCat + '}'
                    ,contentType: "application/json; charset=utf-8"
                    ,dataType: "json"
                    ,success: function (data) {
                        if (data.GetOneProveedorCuentaResult != null) {
                            /*\\Object CharCounter : ------------------------*/
                            var charCounter = new imc.CharCounter({columnName:"PROVEEDOR_CUENTA"});
                            /*//Object CharCounter : ------------------------*/
                            document.getElementById('NUMERO_CUENTA').value = data.GetOneProveedorCuentaResult["NUMERO_CUENTA"];
                            document.getElementById('CLABE').value = data.GetOneProveedorCuentaResult["CLABE"];
                            document.getElementById('BENEFICIARIO').value = data.GetOneProveedorCuentaResult["BENEFICIARIO"];
                            //----------Proveedor
                            var caption = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:gray;' }, data.GetOneProveedorCuentaResult["PROVEEDOR"]);
                            prov.setDefaultCaption(caption);
                            prov.setScrollOnOverflow(true);
                            prov.render(goog.dom.getElement('PROVEEDOR'));
                            that.ID_PROVEEDOR = data.GetOneProveedorCuentaResult["ID_PROVEEDOR"];
                            //----------Banco
                            var caption = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:gray;' }, data.GetOneProveedorCuentaResult["BANCO"]);
                            ban.setDefaultCaption(caption);
                            ban.setScrollOnOverflow(true);
                            ban.render(goog.dom.getElement('BANCO'));
                            that.ID_BANCO = data.GetOneProveedorCuentaResult["ID_BANCO"];
                        } else {
                            alert('Los datos vienen vacios ({"GetOneProveedorCuenta":null})');
                        }
                    }
                    ,error: function (result) {
                        alert('Error al recuperar Proveedor Cuenta ' + result.status + ' ' + result.statusText);
                    }
                });
            });
            $('.newCat').die('click');
            $('.newCat').live('click', function () {
                var dlg = that.dlgNewCatProveedorCuenta();
                dlg.setVisible(true);
                /*\\Object CharCounter : ------------------------*/
                var charCounter = new imc.CharCounter({columnName:"PROVEEDOR_CUENTA"});
                /*//Object CharCounter : ------------------------*/
            });
            $('.deleteCat').die('click');
            $('.deleteCat').live('click', function () {
                var oTable = $('#tblCat').dataTable();
                var stringDeleteCat = "";
                $('input[type="checkbox"]:checked', oTable.fnGetNodes()).each(function (i) {
                    stringDeleteCat += $(this).attr("imc-data") + ",";
                });
                if (stringDeleteCat != "") {
                    stringDeleteCat = stringDeleteCat.substring(0, stringDeleteCat.length - 1);
                }
                if (stringDeleteCat != "") {
                    var dlg = that.dlgDeleteCatProveedorCuenta(stringDeleteCat);
                    dlg.setVisible(true);
                } else {
                    alert('No hay ningún Proveedor Cuenta seleccionado');
                    return true;
                }
            });
        }
        ,error: function (result) {
            alert('Error al obtener Proveedor Cuenta ' + result.status + ' ' + result.statusText);
        }
    });
}

imc.ui.CatProveedorCuenta.prototype.reloadCatProveedorCuentaDataTable = function () { //Recargar tabla al agregar, modificar o eliminar Proveedor Cuenta
    var that = this;
    $.ajax({
        type: "POST"
        ,url: "Services/CAT.svc/GetDataProveedorCuenta"
        ,data: '{}'
        ,contentType: "application/json; charset=utf-8"
        ,dataType: "json"
        ,success: function (data) {
            if (data.GetDataProveedorCuentaResult != null) {
                var ot = $("#tblCat").dataTable();
                ot.fnClearTable();
                ot.fnAddData(data.GetDataProveedorCuentaResult);
            } else {
                that.loadContent();
            }
        }
        ,error: function (result) {
            alert('Error al recargar la tabla de Proveedor Cuenta ' + result.status + ' ' + result.statusText);
        }
    });
}; //Fin recargar tabla al agregar, modificar o eliminar Proveedor Cuenta

imc.ui.CatProveedorCuenta.prototype.dlgNewCatProveedorCuenta = function () { //Dialog agregar Proveedor
    var that = this;
    this.ID_PROVEEDOR = null;
    this.ID_BANCO = null;
    this.dialogAgregarCat = new goog.ui.Dialog();
    this.dialogAgregarCat.setContent(
        '<div style="font-size: 85%;">'
            +'<div class="validateCat"><label class="validarCat"></label></div><br/>'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Proveedor: </label></div><div style="width:256px; float:left;"><label id="PROVEEDOR"></label></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Banco: </label></div><div style="width:256px; float:left;"><label id="BANCO"></label></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Número de cuenta: </label></div><div style="width:450px; float:left;"><input type="text" id="NUMERO_CUENTA" style="width: 250px;" /></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Clabe: </label></div><div style="width:450px; float:left;"><input type="text" id="CLABE" style="width: 250px;" /></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Beneficiario: </label></div><div style="width:450px; float:left;"><input type="text" id="BENEFICIARIO" style="width: 250px;" /></div></div></div><br /><br />'
    );
    var titleNewCat = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:black;font-size:80%;' }, 'Agregar Proveedor Cuenta');
    this.dialogAgregarCat.setTitle(titleNewCat);
    var btnNewCat = new goog.ui.Dialog.ButtonSet();
    btnNewCat.addButton({ caption: "Agregar", key: "e" }).addButton({ caption: "Cancelar", key: "o" });
    this.dialogAgregarCat.setButtonSet(btnNewCat);
    this.dialogAgregarCat.setDisposeOnHide(true);
    /*\\Combo Proveedor : --------------------------------- */
    var prov = new goog.ui.Select(null, null, goog.ui.FlatMenuButtonRenderer.getInstance());
    $.ajax({
        url: "Services/CAT.svc/GetDataProveedor",
        type: "POST",
        dataType: "json",
        data: '{}',
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            if (data.GetDataProveedorResult != null) {
                var test;
                for (var i = 0; i < data.GetDataProveedorResult.length; i++) {
                    test = new goog.ui.MenuItem(data.GetDataProveedorResult[i].PROVEEDOR);
                    test.setValue(data.GetDataProveedorResult[i].ID_PROVEEDOR);
                    prov.addItem(test);
                    goog.events.listen(test, goog.ui.Component.EventType.ACTION, function (e) {
                        that.ID_PROVEEDOR = e.target.getValue();
                        console.log(e.target.getCaption()+" : "+that.ID_PROVEEDOR);
                    });
                }
                var caption = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:gray;' }, 'Opciones...');
                prov.setDefaultCaption(caption);
                prov.setScrollOnOverflow(true);
                prov.render(goog.dom.getElement('PROVEEDOR'));
            }
            else {
                alert('No hay datos de Proveedor cargados en la base');
            }
        },
        error: function () {
            alert('Error al cargar datos Proveedor');
        }
    });
    /*//Combo Proveedor : --------------------------------- */
    /*\\Combo Banco : --------------------------------- */
    var ban = new goog.ui.Select(null, null, goog.ui.FlatMenuButtonRenderer.getInstance());
    $.ajax({
        url: "Services/CAT.svc/GetDataBanco",
        type: "POST",
        dataType: "json",
        data: '{}',
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            if (data.GetDataBancoResult != null) {
                var test;
                for (var i = 0; i < data.GetDataBancoResult.length; i++) {
                    test = new goog.ui.MenuItem(data.GetDataBancoResult[i].BANCO);
                    test.setValue(data.GetDataBancoResult[i].ID_BANCO);
                    ban.addItem(test);
                    goog.events.listen(test, goog.ui.Component.EventType.ACTION, function (e) {
                        that.ID_BANCO = e.target.getValue();
                        console.log(e.target.getCaption()+" : "+that.ID_BANCO);
                    });
                }
                var caption = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:gray;' }, 'Opciones...');
                ban.setDefaultCaption(caption);
                ban.setScrollOnOverflow(true);
                ban.render(goog.dom.getElement('BANCO'));
            }
            else {
                alert('No hay datos de Banco cargados en la base');
            }
        },
        error: function () {
            alert('Error al cargar datos Proveedor');
        }
    });
    /*//Combo Banco : --------------------------------- */
    goog.events.listen(this.dialogAgregarCat, goog.ui.Dialog.EventType.SELECT, function (e) {
        if (e.key == "o") {
            that.ID_PROVEEDOR = null;
            that.ID_BANCO = null;
            return true;
        } else {
            var val1 = $("#NUMERO_CUENTA").val();
            var val2 = $("#CLABE").val();
            var val3 = $("#BENEFICIARIO").val();
            if (that.ID_PROVEEDOR == null || that.ID_BANCO == null || val1 == "" || val2 == "" || val3 == "") {
                $('.validarCat').html('Todos  los campos son requeridos ');
                return false;
            }
            else if (!/^([0-9])*$/.test(val1)) {
                $("#NUMERO_CUENTA").removeClass('campoSinError').addClass('campoConError');
                $("#CLABE").removeClass('campoConError').addClass('campoSinError');
                $('.validarCat').html('El Número de Cuenta debe ser numérico');
                return false;
            }
            else if (!/^([0-9])*$/.test(val2)) {
                $("#NUMERO_CUENTA").removeClass('campoConError').addClass('campoSinError');
                $("#CLABE").removeClass('campoSinError').addClass('campoConError');
                $('.validarCat').html('La Clabe debe ser numérico');
                return false;
            } else {
                $.ajax({
                    url: "Services/CAT.svc/InsertProveedorCuenta"
                    ,type: "POST"
                    ,data: '{"ID_PROVEEDOR":' + that.ID_PROVEEDOR  + ',"ID_BANCO":' + that.ID_BANCO + ',"NUMERO_CUENTA":"' + val1 + '","CLABE":"' + val2 + '","BENEFICIARIO":"' + val3 + '"}'
                    ,contentType: "application/json; charset=utf-8"
                    ,dataType: "json"
                    ,success: function (data) {
                        var test = "";
                        test = data.InsertProveedorCuentaResult.state;
                        console.log('state: '+test);
                        if(!test){
                            $('.validarCat').html('Error al agregar a la tabla');
                            return null;
                        } else {
                            that.reloadCatProveedorCuentaDataTable();
                            that.ID_PROVEEDOR = null;
                            that.ID_BANCO = null;
                            console.log('Antes de despues de Proveedor: '+that.ID_PROVEEDOR);
                            console.log('Antes de despues de Banco: '+that.ID_BANCO);
                            that.dialogAgregarCat.setVisible(false);
                        }
                    }
                    ,error: function (result) {
                        alert('Error al agregar Proveedor Cuenta ' + result.status + ' ' + result.statusText);
                    }
                });
                return false;
            }
        }
    });
    return this.dialogAgregarCat;
};  //Fin dialog agregar ProveedorCuenta

imc.ui.CatProveedorCuenta.prototype.dlgDeleteCatProveedorCuenta = function (stringDeleteCat) { //Dialog borrar Proveedor Cuenta
    var that = this;
    this.dialogBorrarCat = new goog.ui.Dialog();
    this.dialogBorrarCat.setContent(
        '<div style="font-size: 85%;">'
            +'<label>¿Está seguro que desea eliminar los Proveedor Cuenta seleccionados?</label><br />'
        +'</div>'
    );
    this.dialogBorrarCat.setTitle('Borrar Proveedor Cuenta');
    var btnBorrarCat = new goog.ui.Dialog.ButtonSet();
    btnBorrarCat.addButton({ caption: "Borrar", key: "e" }).addButton({ caption: "Cancelar", key: "o" });
    this.dialogBorrarCat.setButtonSet(btnBorrarCat);
    this.dialogBorrarCat.setDisposeOnHide(true);
    goog.events.listen(this.dialogBorrarCat, goog.ui.Dialog.EventType.SELECT, function (e) {
        if (e.key == "o") {
            return true;
        } else {
            console.log(stringDeleteCat);
            $.ajax({
                url: "Services/CAT.svc/DeleteProveedorCuenta",
                type: "POST",
                dataType: "json",
                data: '{"ID_PROVEEDOR_CUENTA": "' + stringDeleteCat + '" }',
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    if (data) {
                        that.reloadCatProveedorCuentaDataTable();
                        return true;
                    }
                },
                error: function (result) {
                    alert('Error al borrar Proveedor Cuenta ' + result.status + ' ' + result.statusText);
                }
            });
        }
    });
    return this.dialogBorrarCat;
}   //Fin dialog borrar Proveedor Cuenta

imc.ui.CatProveedorCuenta.prototype.dlgUpdateProveedorCuenta = function (idCat) { //Dialog modificar Provedor Cuenta
    var that = this;
    this.dialogModificarCat = new goog.ui.Dialog();
    this.dialogModificarCat.setContent(
        '<div style="font-size: 85%;">'
            +'<div class="validateCat"><label class="validarCat"></label></div><br/>'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Proveedor: </label></div><div style="width:256px; float:left;"><label id="PROVEEDOR"></label></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Banco: </label></div><div style="width:256px; float:left;"><label id="BANCO"></label></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Número de cuenta: </label></div><div style="width:450px; float:left;"><input type="text" id="NUMERO_CUENTA" style="width: 250px;" /></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Clabe: </label></div><div style="width:450px; float:left;"><input type="text" id="CLABE" style="width: 250px;" /></div></div><br /><br />'
            +'<div><div style="width:150px; float:left;"><label style="float:right;">Beneficiario: </label></div><div style="width:450px; float:left;"><input type="text" id="BENEFICIARIO" style="width: 250px;" /></div></div></div><br /><br />'
    );
    var titleModificarCat = goog.dom.createDom("p", { style: 'margin:0;padding:0;color:black;font-size:80%;' }, 'Modificar Prooveedor Cuenta');
    this.dialogModificarCat.setTitle(titleModificarCat);
    var btnModificarCat = new goog.ui.Dialog.ButtonSet();
    btnModificarCat.addButton({ caption: "Guardar cambios", key: "e" }).addButton({ caption: "Cancelar", key: "o" });
    this.dialogModificarCat.setButtonSet(btnModificarCat);
    this.dialogModificarCat.setDisposeOnHide(true);
    goog.events.listen(this.dialogModificarCat, goog.ui.Dialog.EventType.SELECT, function (e) {
        //alert(e.key);
        if (e.key == "o") {
            that.ID_PROVEEDOR = null;
            that.ID_BANCO = null;
            return true;
        } else {
            var val1 = $("#NUMERO_CUENTA").val();
            var val2 = $("#CLABE").val();
            var val3 = $("#BENEFICIARIO").val();
            if (that.ID_PROVEEDOR == null || that.ID_BANCO == null || val1 == "" || val2 == "" || val3 == "") {
                $('.validarCat').html('Todos  los campos son requeridos ');
                return false;
            }
            else if (!/^([0-9])*$/.test(val1)) {
                $("#NUMERO_CUENTA").removeClass('campoSinError').addClass('campoConError');
                $("#CLABE").removeClass('campoConError').addClass('campoSinError');
                $('.validarCat').html('El Número de Cuenta debe ser numérico');
                return false;
            }
            else if (!/^([0-9])*$/.test(val2)) {
                $("#NUMERO_CUENTA").removeClass('campoConError').addClass('campoSinError');
                $("#CLABE").removeClass('campoSinError').addClass('campoConError');
                $('.validarCat').html('La Clabe debe ser numérico');
                return false;
            } else {
                console.log('Antes de modificar Proveedor: '+that.ID_PROVEEDOR);
                console.log('Antes de modificar Banco: '+that.ID_BANCO);
                $.ajax({
                    url: "Services/Cat.svc/UpdateProveedorCuenta"
                    ,type: "POST"
                    ,data: '{"ID_PROVEEDOR_CUENTA":' + idCat + ',"ID_PROVEEDOR":' + that.ID_PROVEEDOR  + ',"ID_BANCO":' + that.ID_BANCO + ',"NUMERO_CUENTA":"' + val1 + '","CLABE":"' + val2 + '","BENEFICIARIO":"' + val3 + '"}'
                    ,contentType: "application/json; charset=utf-8"
                    ,dataType: "json"
                    ,success: function (data) {
                        that.reloadCatProveedorCuentaDataTable();
                        that.ID_PROVEEDOR = null;
                        that.ID_BANCO = null;
                        console.log('Después de modificar Proveedor: '+that.ID_PROVEEDOR);
                        console.log('Después de modificar Banco: '+that.ID_BANCO);
                        return true;
                    }
                    ,error: function (result) {
                        alert('Error al modificar Proveedor Cuenta' + result.status + ' ' + result.statusText);
                    }
                });
            }
        }
    });
    return this.dialogModificarCat;
} //Fin dialog modificar Proveedor Cuenta